package config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

/**
 * 该类是一个配置类，它的作用是和bean.xml的一样
 * spring中的新注解
 *      Configuration:
 *              作用：指定当前是一个配置类
 *      ComponentScan:
 *              作用：用于通过注解指定spring在创建容器时要扫描的包
 *       属性：value；它和besePackages的作用是一样的，都是用于指定创建容器时要扫描的包
 *       Bean:
 *          作用：用于把当前方法的返回值作为bean对象存入spring的ioc容器中
 *          属性：name
 *                     用于指定bean的id，当不写的时候，默认值是当前方法的名称
 */
@Configuration
@ComponentScan("com.itheima")//相当于<context:component-scan base-package="com.itheima"></context:component-scan>
public class SpringConfiguration {

    @Bean(name = "runner")
    public QueryRunner createQueryRunner(DataSource dataSource){
        return new QueryRunner(dataSource);
    }

    /**
     * 创建数据源
     * @return
     */
    @Bean(name = "dataSource")
    public DataSource createDataSource(){
        try {
            ComboPooledDataSource ds = new ComboPooledDataSource();
            ds.setDriverClass("com.mysql.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/springdb01");
            ds.setUser("root");
            ds.setPassword("root");
            return ds;
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        return null;
    }

}
